home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 January / macformat46.iso / Demos / PowerFantasm 4.15 / Beginners guide / GUIDE EXAMPLES / EXAMPLE8.S < prev    next >
Encoding:
Text File  |  1996-06-21  |  2.1 KB  |  57 lines

  1. ********************************************************************************
  2. *EXAMPLE 8 - CLEARING THE SCREEN                                               *
  3. *AUTHOR    - STUART BALL JULY 94                                               *
  4. *SCREEN MUST BE SET TO 256 COLOUR MODE FOR THIS EXAMPLE                        *
  5. ********************************************************************************
  6. SCREENROW:    EQU    $0106    WIDTH OF EACH SCREEN LINE
  7. DEVICELIST:    EQU    $08A8    THE ADDRESS OF DEVICELIST
  8. gdPMap_offset:    EQU    22
  9. EXAMPLE8:    MOVEM.L    A5-A6,-(SP)    SAVE MAC WORLD
  10.     BSR    INIT    INITIALISE OUR VARIABLES
  11.     BSR    CLS    CLEAR THE SCREEN
  12.     MOVEM.L    (SP)+,A5-A6    RESTORE MAC WORLD
  13.     RTS
  14. ************************END OF EXAMPLE 8***************************************
  15.  
  16. **INIT SETS UP OUR VARIABLES
  17. INIT:    LEA    MY_VARS(PC),A6    A6 IS OUR VARIABLE POINTER
  18.     MOVE.L    DEVICELIST,A0
  19.     MOVE.L    (A0),A0    POINT TO DEVICELIST
  20.     MOVE.L    A0,A1    COPY ADDRESS OF DEVICE LIST
  21.     MOVE.L    gdPMap_offset(A1),A1    A1=POINTER TO GDPMAP
  22.     MOVE.L    (A1),A1        gdPMap IN A1
  23.     MOVE.W    10(A1),NUMB_OF_LINES(A6)    SAVE NUMBER OF LINES
  24.     MOVE.L    (A1),VRAM_ADDR(A6)    SAVE VRAM ABSOLUTE ADDRESS
  25.     RTS
  26.     
  27. **CLS CLEARS THE MAC SCREEN TOTALLY
  28. **PRESERVES ALL REGISTERS
  29. CLS:    MOVEM.L    D0-D2/A1,-(SP)    SAVE REGS
  30.     
  31.     CLR.L    D0
  32.     CLR.L    D1
  33.     CLR.L    D2
  34.     
  35.     MOVE.L    VRAM_ADDR(A6),A1    VRAM ADDRESS IN A1
  36.     MOVE.W    NUMB_OF_LINES(A6),D0    NUMBER OF LINES ON SCREEN
  37.     SUBQ.W    #1,D0    DBcc ALWAYS LOOPS ONE MORE THAN THE COUNT
  38.     MOVE.W    SCREENROW,D1    WIDTH IN BYTES OF EACH LINE
  39.     LSR.W    #2,D1    DIVIDE BY FOUR AS WERE CLEARING LONGS
  40.     SUBQ.W    #1,D1    DBRA ALWAYS LOOPS 1 MORE THAN THE COUNT!
  41.     MOVE.W    D1,D2    SAVE SIZE OF LINE(IN BYTES)
  42.  
  43. NEXT_LINE:
  44. CLEAR_LINE:    CLR.L    (A1)+    CLEAR THIS BYTE OF VRAM AND POINT TO NEXT
  45.     DBRA    D1,CLEAR_LINE    CLEAR THIS LINE
  46.     MOVE.W    D2,D1    RESET BYTES/LINE COUNTER
  47.     DBRA    D0,NEXT_LINE    CLEAR NEXT LINE
  48.     
  49.     MOVEM.L    (SP)+,D0-D2/A1    RESTORE REGS
  50.     RTS
  51.  
  52. *********************************VARIABLES FOLLOW********************************
  53. MY_VARS:    DS.B    20    SPACE FOR OUR VARIABLES
  54.  
  55. ******************************OFFSETS INTO VARIABLES*****************************
  56. NUMB_OF_LINES:    EQU    0    .W NUMBER OF PHYSICAL LINES ON SCREEN    
  57. VRAM_ADDR:        EQU    2    .L ABSOLUTE ADDRESS OF VRAM